﻿//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>

#include "common.h"

void test_while(int num)
// 测试 while 中的 break 和 continue，注意 while 循环的执行顺序就是代码行顺序
{
	while (num <= 10)
	{
		if (5 == num)
			break; // 结束循环，这里的 break 不匹配 if，而是匹配 while
		num++;
		if (3 == num)
			continue;  // 跳出本次循环，重新开始下次循环，同样匹配的是 while
		// 注意程序执行到 continue 语句时会直接跳出循环重新开始，后面循环的语句不会被执行
		printf("%d ", num);
	}
}

void char_test()
{
	int c1 = 0; // getchar()从键盘获取一个字符（按键），输出对应的 ASCII 码值
	printf("请输入字符：");
	while ((c1 = getchar()) != EOF) // EOF 指非法输入时返回，值为 -1
	{ // 注意 getchar 一次只读取一个字符
		printf("按键为%c，ASCII码值为：%d\n", c1, c1); // %c 将 ASCII 码输出为字符
		putchar(c1); // 可以将整数的 ASCII 码输出为字符，作用同上面 %c
		// 因为需要按回车键提交到缓冲区，逐一读取，所以每次会打印按键值和回车键值（10）
		printf("请输入字符："); // 输出一个回车换行
	}
	// getchar 和 putchar 的头文件都为 stdio.h
	//return 0;
}

void clean_cache()
// 清理缓存区的函数，用于逐一读取缓冲区数据，遇到回车键停止（字符'\n'）
{
	int start = 0;
	while ((start = getchar()) != '\n')
		continue;
}

void password_input_test() {
	// 实现输入密码，回车以后能输入 Y 确认键或输入 N 取消
	char password[100] = { 0 }; // 数组必须有个初始值，数组本身就是地址
	int res;
	printf("请输入密码>");
	res = scanf("%s", password); // 对于数组，不需要取地址
	// 注意 scanf 函数读取到空格字符就会停止（不会读取空格）
	// 调用清除缓存区函数
	clean_cache();
	printf("输入的密码是：%s", password);
	printf("提交密码？（Y/N）>");
	int ver_char = getchar(); // 会等待键盘输入
	if ('y' == ver_char || 'Y' == ver_char)
		printf("已确认提交密码\n");
	else if ('n' == ver_char || 'N' == ver_char)
		printf("取消提交密码\n");
	else
	{
		clean_cache();
		printf("输入错误\n");
	}
}

void only_output_num()
{ // 对于输入的字符串，只打印数字
	char ch = '\0';
	printf("请输入字符串：\n");
	while ((ch = getchar()) != EOF)
	{
		if ('\n' == ch)
		{
			printf("\n");
			break;
		}
		else if (ch < '0' || ch > '9')
			continue;
		//printf("%c", ch);
		putchar(ch);
	}
}
